package com.qianfeng.dto;

import com.qianfeng.pojo.CheckNull;
import com.qianfeng.status.ResultCode;
import com.qianfeng.valigroup.Insert;
import com.qianfeng.valigroup.Select;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.Serializable;

/*
 *@Description:
 *@author:刘哥
 *@Date:86180 2022/9/5 11:33
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class userDto implements CheckNull, Serializable {
//    @Validated指明校验注解生效的位置,    Insert.class表名是针对哪个组的属性生效
    //group指的是当前校验的时候指定的group属于当前groups中的一个的时候就进行校验需要和@Validated搭配使用
    @NotEmpty(message = "{\"code\": "+ ResultCode.PARAM_CONTENT_EMPTY +",\"msg\": \"用户名不能为空,请检查\"}", groups = {Insert.class, Select.class})
    private String username;
//  带注解的属性的长度范围
//    @min最小长度
//    @max最大长的
    @Length(min = 6, max = 10 ,message = "{\"code\": "+ ResultCode.PARAM_CONTENT_PARTTEN_ERROR +",\"msg\": \"密码长度6-10\"}", groups ={Insert.class, Select.class})
    private String password;
//    带注释的元素不能为null或空。
    @NotEmpty(message = "{\"code\": "+ ResultCode.PARAM_CONTENT_EMPTY +",\"msg\": \"必须传递昵称\"}", groups = Insert.class)
    private String name;

//    带注释的CharSequence必须与指定的正则表达式匹配。正则表达式遵循Java正则表达式约定，请参见Java.util.regex.Pattern。
    @Pattern(regexp = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$", groups = Insert.class,message = "{\"code\": "+ ResultCode.PARAM_CONTENT_PARTTEN_ERROR +",\"msg\": \"手机号错误\"}")
    private String phone;

    @Pattern(regexp = "^\\w+@[\\da-z\\.-]+\\.([a-z]{2,6}|[\\u2E80-\\u9FFF]{2,3})$", groups = Insert.class,message = "{\"code\": "+ ResultCode.PARAM_CONTENT_PARTTEN_ERROR +",\"msg\": \"邮箱错误\"}")
    private String email;
//    带注释的元素不能为空。接受任何类型。
    @NotNull(groups = Insert.class,message = "{\"code\": "+ ResultCode.PARAM_CONTENT_EMPTY +",\"msg\": \"性别未传递\"}")
    private Long sex;


    @Override
    public boolean isEmpty() {
//        spring自带的判断字符串是否为空的方法
        return !StringUtils.hasText(username)
                || !StringUtils.hasText(password)
                || !StringUtils.hasText(name)
                || !StringUtils.hasText(phone)
                || !StringUtils.hasText(email)
                || ObjectUtils.isEmpty(sex)
                || (sex != 0 & sex != 1);
    }
}
